<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <div id="app">
      <input type="text" v-faker />
      <h1>{{name}}</h1>
    </div>
  </body>
</html>
<script src="http://chst.vip:8081/vue.js"></script>
<script>
  // 钩子函数：程序执行到某个阶段自行回调的函数就是钩子函数
  // vue2版本中 自定义钩子函数有3个 bind inserted update
  // 虚拟dom：本质就是使用js在内存中模拟真实dom树的嵌套，配合diff算法来实现页面的高效更新
  Vue.directive("faker", {
    bind(el) {
      // 没有父节点
      console.group("bind钩子");
      console.log(el.parentNode);
      console.log(el);
      console.groupEnd();
    }, //指令第一次绑定到元素上的时候触发
    inserted(el) {
      console.group("inserted钩子");
      console.log(el);
      el.focus();
      console.log(el.parentNode);
      console.groupEnd();
    }, //指令所在dom元素，插入到父节点内部的时候触发
    update(el) {
      console.group("update钩子");
      console.log(el);
      console.groupEnd();
    }, //指令所在区间，虚拟dom更新的时候触发
  });
  const vm = new Vue({
    el: "#app",
    data: {
      name: "harry",
    },
  });
</script>
